import type { App } from "vue";
import { useUserInfo } from "/@/stores/userInfo";
import { judementSameArr } from "/@/utils/arrayOperation";

/**
 * 用户权限指令
 * @directive 单个权限验证（v-auth="xxx"）
 * @directive 多个权限验证，满足一个则显示（v-auths-sin="[xxx,xxx]"）
 * @directive 多个权限验证，全部满足则显示（v-auths-all="[xxx,xxx]"）
 */
export function authDirective(app: App) {
	// 单个权限验证（v-auth="xxx"）
	app.directive("auth", {
		mounted(el, binding) {
			const stores = useUserInfo();
			if (!stores.userInfo.authBtnList.some((v: string) => v === binding.value))
				el.parentNode.removeChild(el);
		},
	});
	// 多个权限验证，满足一个则显示（v-auths-sin="[xxx,xxx]"）
	app.directive("auths-sig", {
		mounted(el, binding) {
			const stores = useUserInfo();
			if (!stores.userInfo.authBtnList.some((v: string) => binding.value.includes(v))) {
				el.parentNode.removeChild(el);
			}
		},
	});
	// 多个权限验证，全部满足则显示（v-auths-all="[xxx,xxx]"）
	app.directive("auths-all", {
		mounted(el, binding) {
			const stores = useUserInfo();
			const flag = judementSameArr(binding.value, stores.userInfo.authBtnList);
			if (!flag) el.parentNode.removeChild(el);
		},
	});
}
